#include <iostream>


//
// Clases
//

class cNum {
	int m_numero;
	
public:
	cNum(int numero=0) {m_numero = numero;}
	~cNum() {}
	cNum(cNum& num) : m_numero(num.GetNum()) {
		std::cout << "Inside cNum Copy-Constructor" << std::endl;
	}
	int GetNum(void) const {return m_numero;}
	void SetNum(int numero) {m_numero = numero;}
};


class cNumContainer {
	int m_numero2;
	cNum m_numero1;

public:
	cNumContainer(int numero2=0) : m_numero1() {m_numero2=numero2;}
	~cNumContainer() {}
	int GetNum(void) const {return m_numero2;}
	void SetCNUM(const cNum num) {m_numero1 = num;}
};


//
//Main
//

int main(void) {

	cNum numero(7);

	cNumContainer container(4);

	// Primer llamada al copy constructor
	container.SetCNUM(numero);

	// Segunda llamada al copy constructor
	cNumContainer container2 = container;


	return 0;
}

/* Recordatorios del CC
Se usa en 
(1) pasaje de argumentos por valor
(2) retorno por valor (variable local dentro de funcion no anda)
(3) inicializacion de una variable de una clase, pero unicamente en su definicion no despues*/
